package com.hbnu.cmd.controller;

import com.hbnu.common.factory.ServiceFactory;
import com.hbnu.common.response.ServiceResponse;
import com.hbnu.common.service.RegisterService;
import com.hbnu.common.util.CheckUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 注册功能控制台控制器，负责处理用户注册相关的控制台请求。
 * 该控制器接收用户输入的注册信息，进行初步参数校验后，
 * 调用 {@link RegisterService} 处理核心业务逻辑，并将处理结果输出到控制台。
 * 同时，通过 SLF4J 记录关键操作日志，便于问题追踪和系统监控。
 */

public class RegisterController {
    private static final Logger logger = LoggerFactory.getLogger(RegisterController.class);
    private final RegisterService registerService = ServiceFactory.getRegisterService();

    /**
     * 处理用户注册请求，完成参数校验、业务逻辑调用和结果展示。
     * 流程如下：
     * 1. 记录注册请求日志（包含用户名）；
     * 2. 通过 {@link CheckUtil} 工具类校验用户名和密码格式合法性；
     * 3. 若参数校验失败，输出错误提示（System.err）并记录警告日志，直接返回；
     * 4. 若参数合法，调用 {@link RegisterService#handleRegister(String, String)} 处理注册逻辑；
     * 5. 根据 Service 返回的 {@link ServiceResponse}，输出对应提示（成功用 System.out，失败用 System.err）；
     * 6. 记录注册结果日志（成功/失败原因）。
     *
     * @param username 用户输入的注册账号（需唯一）
     * @param password 用户输入的注册密码
     * @param confirmPassword 用户输入的注册密码的二次确认
     */
    public void handleRegister(String username, String password, String confirmPassword) {
        logger.info("收到注册请求：用户名={}", username);

        String errorMessage = CheckUtil.checkUsername(username);
        if (errorMessage != null) {
            System.err.println("注册失败：" + errorMessage + "!");
            logger.warn("注册失败：用户名={}，原因={}", username, errorMessage);
            return;
        }

        errorMessage = CheckUtil.checkPassword(password);
        if (errorMessage != null) {
            System.err.println("注册失败：" + errorMessage + "!");
            logger.warn("注册失败：用户名={}，原因={}", username, errorMessage);
            return;
        }

        if (!password.equals(confirmPassword)) {
            System.err.println("注册失败：两次输入的密码不一致！");
            logger.warn("注册失败：用户名={}，原因=两次输入的密码不一致", username);
            return;
        }

        ServiceResponse<Void> response = registerService.handleRegister(username, password);
        if (response.isSuccess()) {
            System.out.println(response.getAlertMessage() + "!");
            logger.info("注册成功：用户名={}", username);
        } else {
            System.err.println("注册失败：" + response.getErrorMessage() + "!");
            logger.warn("注册失败：用户名={}，原因={}", username, response.getErrorMessage());
        }
    }
}
